# =============================================
# 1. 基本数据类型
# =============================================

# 整数（int）
age = 25
print(type(age))  # <class 'int'>

# 浮点数（float）
height = 1.75
print(type(height))  # <class 'float'>

# 布尔值（bool）
is_student = True
print(type(is_student))  # <class 'bool'>

# 字符串（str）
name = "Alice"
print(type(name))  # <class 'str'>

# 复数（complex）
complex_num = 3 + 4j
print(type(complex_num))  # <class 'complex'>


# =============================================
# 2. 复合数据类型
# =============================================

# 列表（list）：有序、可变
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")  # 列表可修改
print(type(fruits))  # <class 'list'>

# 元组（tuple）：有序、不可变
colors = ("red", "green", "blue")
# colors[0] = "pink"  # 会报错，元组不可修改
print(type(colors))  # <class 'tuple'>

# 字典（dict）：键值对、无序
person = {
    "name": "Bob",
    "age": 30,
    "is_married": False
}
print(type(person))  # <class 'dict'>

# 集合（set）：无序、元素唯一
unique_numbers = {1, 2, 3, 2, 1}
print(unique_numbers)  # 输出 {1, 2, 3}
print(type(unique_numbers))  # <class 'set'>

# 字节（bytes）：不可变的二进制序列
byte_data = b"hello"
print(type(byte_data))  # <class 'bytes'>


# =============================================
# 3. 特殊类型
# =============================================

# NoneType：表示空值
empty_value = None
print(type(empty_value))  # <class 'NoneType'>


# =============================================
# 4. 类型转换示例
# =============================================

# 字符串转整数
num_str = "123"
num_int = int(num_str)
print(num_int, type(num_int))  # 123 <class 'int'>

# 整数转字符串
int_to_str = str(456)
print(int_to_str, type(int_to_str))  # 456 <class 'str'>

# 浮点数转整数（截断小数）
float_to_int = int(3.99)
print(float_to_int)  # 3

# 列表转集合
list_to_set = set([1, 2, 2, 3])
print(list_to_set)  # {1, 2, 3}


# =============================================
# 5. 类型检查与特性
# =============================================

# 检查类型
value = 3.14
print(isinstance(value, float))  # True

# 字符串不可变性示例
s = "hello"
# s[0] = "H"  # 会报错，字符串不可修改

# 列表可变性示例
lst = [1, 2, 3]
lst[0] = 100  # 合法操作
print(lst)  # [100, 2, 3]